<?php


/*
 * File theorie.php for project Rijlesplanner.nl
 * Created on 2 dec 2007 at 21:30:23 by Ivar Pruijn
 */
class persoonlijk extends modules {
	// Properties:
	protected $name = "persoonlijk";
	protected $title = "Mijn persoonlijke informatie";
	protected $subtitle = "";
	protected $moduleOptions = array ();
	private $errors = array ();

	// Methods:

	/**
	 * void __construct ()
	 * This is the constructor method for this class.
	 */
	public function __construct() {
		parent :: __construct();
		$this->logger = parent :: getLogger();
		$this->user = parent :: getUser();
		$this->template = parent :: getTemplate();
	}

	/**
	 * Object process()
	 * 
	 * Processes the template and current module
	 * 
	 * @param Smarty template The Smarty template to process (sets variables etc.)
	 * @return Smarty The template that has been processed
	 */
	function process(& $template = null) {
		$this->template = $template;
		
		parent::loadModule("ads",$template);
		
		
		header("Expires: Mon, 26 Jul 1990 05:00:00 GMT");
		header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
		header("Cache-Control: no-store, no-cache, must-revalidate");
		header("Cache-Control: post-check=0, pre-check=0", false);
		header("Pragma: no-cache");
		if ($this->user instanceof Visitor) {
			parent :: loadModule("authentication", $template);
		} else {
			if ($this->user instanceof Leerling) {
				$this->template->assign('rijschool', array (
					'naam' => $this->user->getRijschoolNaam(),
					'id' => $this->user->getRijschoolId()
				));
			}
		}
		if (!empty ($_POST)) {
			if (!$this->auth->accessTo($this->name, null, $_POST['action'])) {
				$this->actionAccessDenied();
			} else {
				switch ($_POST['action']) {
					case "wijziggegevens" :
						$this->wijzigGegevens();
						$this->template->assign('moduleTemplate', 'modules/persoonlijk/wijzigengegevens_leerling.tpl');
						break;
					case "wijzigfoto" :
						$this->wijzigFoto();
						$this->template->assign('moduleTemplate', 'modules/persoonlijk/wijzigenfoto_leerling.tpl');
						break;
				}
			}
		} else {
			if (!empty ($_GET['option'])) {
				if (!$this->auth->accessTo($this->name, $_GET['option'])) {
					$this->optionAccessDenied();
				} else {
					switch ($_GET['option']) {
						case "gegevens" :
							if ($this->user instanceof Leerling) {
								$this->gegevens();
								$this->template->assign('moduleTemplate', 'modules/persoonlijk/gegevens_leerling.tpl');
							}
							break;
						case "fotowijzigen" :
							if ($this->user instanceof Leerling) {
								$this->fotoWijzigen();
								$this->template->assign('moduleTemplate', 'modules/persoonlijk/wijzigfoto_leerling.tpl');
							}
							break;
						case "financieel" :
							if ($this->user instanceof Leerling) {
								if (!empty ($_GET['action']) && $_GET['action'] == "factuurdetails") {
									$factuurId = $_GET['id'];
									$this->financieelFactuurDetails($factuurId);
									$this->template->assign('moduleTemplate', 'modules/persoonlijk/financieel_factuurdetails_leerling.tpl');
								} else {
									$this->financieel();
									$this->template->assign('moduleTemplate', 'modules/persoonlijk/financieel_leerling.tpl');
								}
							}
							break;
						default :
							break;
					}
				}
			} else {
				parent::loadModule("reviews",$template);
				if ($this->user instanceof Visitor) {
					$this->template->assign('moduleTemplate', 'modules/persoonlijk/persoonlijk_bezoeker.tpl');
				} else if ($this->user instanceof Leerling) {
					$this->persoonlijkPageContent();
					$this->template->assign('moduleTemplate', 'modules/persoonlijk/persoonlijk_leerling.tpl');
				}
			}
		}
	}

	function persoonlijkPageContent() {
		$errors = array ();
		try {
			$result = $this->wsclient->WS_Rijlesplanner_GetContent(array (
				'RijschoolId' => $this->user->getRijschoolId(),
				'SessionId' => $_SESSION['SessionId'],
				'PageId' => 'persoonlijk'
			));
			$content = $result->Content;
			$this->template->assign('pageContent', $content);
		} catch (SoapFault $e) {
			$this->logger->log("SOAP Fault: (faultcode: {$e->faultcode} faultstring: {$e->faultstring})", PEAR_LOG_INFO);
			switch ($e->faultcode) {
				default :
					$errorcode = 64;
					$errormessage = 'Er is een onbekende fout bij ophalen van de persoonlijk pagina content ("'.$e->faultstring.'")';
					break;
			}
			$errors[] = array (
				'code' => $errorcode,
				'message' => $errormessage
			);
			$this->setSubtitle($errormessage);
		}
		$this->template->assign('errors', $errors);
	}


	/**
	 * void gegevens()
	 * 
	 * Shows the 'Mijn gegevens' page (for a Leerling that is logged in)
	 * Sets an error array in the template in case of errors.
	 */
	function gegevens() {
		$this->logger->log(print_r($this->user,true));
		if (!$this->auth->accessTo($this->name, "","wijziggegevens")) {
			$this->template->assign('accessToGegevensWijzigen',false);
		} else {
			$this->template->assign('accessToGegevensWijzigen',true);
		}
		$woonadres = $this->user->getWoonAdres();
		$this->template->assign('woonadres', $woonadres);
		$birthDate = new DateTime($this->user->getGeboortedatum());
		$birthdateDay = $birthDate->format("d");
		$this->template->assign('birthdateDay', $birthdateDay);
		$birthdateMonth = $birthDate->format("m");
		$this->template->assign('birthdateMonth', $birthdateMonth);
		$birthdateYear = $birthDate->format("Y");
		$this->template->assign('birthdateYear', $birthdateYear);
	}

	function wijzigGegevens() {
		$wijzigenResult = false;
		$this->errors = array ();
		try {
			if (!isset ($_POST['email']) || empty ($_POST['email'])) {
				throw new GegevensWijzigenException('Geen emailadres ingevuld', 39);
			}
			if (!isset ($_POST['straatnaam']) || empty ($_POST['straatnaam'])) {
				throw new GegevensWijzigenException('Geen straatnaam ingevuld', 40);
			}
			if (!isset ($_POST['huisnummer']) || empty ($_POST['huisnummer'])) {
				throw new GegevensWijzigenException('Geen huisnummer ingevuld', 41);
			}
			if (!isset ($_POST['postcode']) || empty ($_POST['postcode'])) {
				throw new GegevensWijzigenException('Geen postcode ingevuld', 42);
			}
			if (!isset ($_POST['plaats']) || empty ($_POST['plaats'])) {
				throw new GegevensWijzigenException('Geen plaats ingevuld', 43);
			}
			if (!isset ($_POST['mobiel']) || empty ($_POST['mobiel'])) {
				throw new GegevensWijzigenException('Geen mobiel nummer ingevuld', 45);
			}
			if (!isset ($_POST['geboorteplaats']) || empty ($_POST['geboorteplaats'])) {
				throw new GegevensWijzigenException('Geen geboorteplaats ingevuld', 46);
			}
			if (!isset ($_POST['birthdateYear']) || empty ($_POST['birthdateYear']) || !isset ($_POST['birthdateMonth']) || empty ($_POST['birthdateMonth']) || !isset ($_POST['birthdateDay']) || empty ($_POST['birthdateDay'])) {
				throw new GegevensWijzigenException('Geen geboortedatum gegeven', 47);
			}
			$nieuwWachtwoord = "";
			if (isset ($_POST['pwnew1']) && !empty ($_POST['pwnew1']) && isset ($_POST['pwnew2']) && !empty ($_POST['pwnew2']) && ($_POST['pwnew1'] != $_POST['pwnew2'])) {
				throw new GegevensWijzigenException('De twee nieuw opgegeven wachtwoorden komen niet overeen', 48);
			} else {
				$nieuwWachtwoord = $_POST['pwnew1'];
			}

			$toevoeging = isset ($_POST['toevoeging']) ? $_POST['toevoeging'] : "";
			$land = "Nederland";

			$woonadres = new Adres();
			$woonadres->setStraatnaam($_POST['straatnaam']);
			$woonadres->setHuisnummer($_POST['huisnummer']);
			$woonadres->setToevoeging($toevoeging);
			$woonadres->setPostcode($_POST['postcode']);
			$woonadres->setPlaats($_POST['plaats']);
			$woonadres->setLand($land);

			$birthdateString = $_POST['birthdateYear'] . "-" . $_POST['birthdateMonth'] . "-" . $_POST['birthdateDay'];
			$date = new DateTime($birthdateString);
			$birthdate = $date->format(DATE_ISO8601);
			$geboorteland = $this->user->getGeboorteLand();
			$geslacht = "";

			$this->user->setEmail($_POST['email']);
			$this->user->setTelefoon($_POST['telefoon']);
			$this->user->setMobiel($_POST['mobiel']);
			$this->user->setGeboortedatum($birthdate);
			$this->user->setGeboorteplaats($_POST['geboorteplaats']);
			$this->user->setWoonAdres($woonadres);

			$result = $this->wsclient->WS_Rijlesplanner_SaveLeerling(array (
				'RijschoolId' => $this->user->getRijschoolId(),
				'SessionId' => $_SESSION['SessionId'],
				'Leerling' => $this->user,
				'NieuwWachtwoord' => $nieuwWachtwoord
			));
			$wijzigenResult = $result->Success;
		} catch (SoapFault $e) {
			$this->logger->log("WSCLIENT: ".print_r($this->wsclient,true),PEAR_LOG_DEBUG);
			$this->logger->log("SOAP Fault: (faultcode: {$e->faultcode} faultstring: {$e->faultstring})", PEAR_LOG_INFO);
			switch ($e->faultcode) {
				case 2 :
					$errorcode = 50;
					$errormessage = 'Deze leerlinggegeven mogen niet bewerkt worden';
					break;
				default :
					$errorcode = 49;
					$errormessage = 'Het wijzigen van je persoonlijke gegevens is niet gelukt ("' . $e->faultstring . '")';
					break;
			}
			$this->errors[] = array (
				'code' => $errorcode,
				'message' => $errormessage
			);
			$this->setSubtitle($errormessage);
		} catch (GegevensWijzigenException $e) {
			$this->errors[] = array (
				'code' => $e->getCode(),
				'message' => $e->getMessage()
			);
			$this->setSubtitle($e->getMessage());
		}
		$this->template->assign('errors', $this->errors);
		$this->template->assign('wijzigenResult', $wijzigenResult);
	}

	/**
	 * void financieel()
	 * 
	 * Shows the 'Foto wijzigen' page (for a Leerling that is logged in)
	 * Sets an error array in the template in case of errors.
	 */
	function fotoWijzigen() {
	}

	function wijzigFoto() {
		$wijzigenResult = false;
		$this->errors = array ();
		try {
			if (!isset($_FILES['foto']) || empty($_FILES['foto']['tmp_name'])) {
				throw new FotoWijzigenException('Je hebt geen foto geselecteerd', 52);
			}
			if ($_FILES['foto']['size'] > $this->config['persoonlijk_fotowijzigen_maxbytes']) {
				throw new FotoWijzigenException('Het bestand is '.$_FILES['bestand']['size'].' bytes groot, het maximale toegestaan is '.$this->config['persoonlijk_fotowijzigen_maxbytes'].' bytes', 53);
			}
			if (!($_FILES['foto']['type'] == "image/gif" || $_FILES['foto']['type'] == "image/png" || $_FILES['foto']['type'] == "image/pjpeg" || $_FILES['foto']['type'] == "image/jpeg")) {
				throw new FotoWijzigenException('De foto is geen PNG, JPG of GIF bestand', 54);
			}
			$base64image = "";
			$handle = fopen($_FILES['foto']['tmp_name'], 'r');
			while (!feof($handle)) {
			  $base64image .= fread($handle, 8192);
			}
			fclose ($handle);
			$this->logger->log("Saving image ");
			$base64image=base64_encode($base64image);
			$result = $this->wsclient->WS_Rijlesplanner_SaveLeerlingImage(array (
				'RijschoolId' => $this->user->getRijschoolId(),
				'SessionId' => $_SESSION['SessionId'],
				'LeerlingId' => $this->user->getId(),
				'Base64Image' => $base64image
			));
			$this->logger->log("Result of image save: " . print_r($result, true), PEAR_LOG_DEBUG);
			$wijzigenResult = $result->Success;
			if($wijzigenResult) {
				$newImageURL = $result->Image;
				$this->user->setAfbeelding($newImageURL);
			}
			header("Expires: Mon, 26 Jul 1990 05:00:00 GMT");
			header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
			header("Cache-Control: no-store, no-cache, must-revalidate");
			header("Cache-Control: post-check=0, pre-check=0", false);
			header("Pragma: no-cache");
		} catch (SoapFault $e) { 
			$this->logger->log("SOAP Fault: (faultcode: {$e->faultcode} faultstring: {$e->faultstring})", PEAR_LOG_INFO);
			switch ($e->faultcode) {
				case 2 :
					$errorcode = 55;
					$errormessage = 'De foto is onbekend voor deze leerling';
					break;
				default :
					$errorcode = 51;
					$errormessage = 'Het wijzigen van je foto is niet gelukt ("' . $e->faultstring . '")';
					break;
			}
			$this->errors[] = array (
				'code' => $errorcode,
				'message' => $errormessage
			);
			$this->setSubtitle($errormessage);
		} catch (FotoWijzigenException $e) {
			$this->errors[] = array (
				'code' => $e->getCode(),
				'message' => $e->getMessage()
			);
			$this->setSubtitle($e->getMessage());
		}
		$this->template->assign('errors', $this->errors);
		$this->template->assign('wijzigenResult', $wijzigenResult);
	}

	/**
	 * void financieel()
	 * 
	 * Shows the 'Financieel' page (for a Leerling that is logged in)
	 * Sets an error array in the template in case of errors.
	 */
	function financieel() {
		$this->errors = array ();
		try {
			$result = $this->wsclient->WS_Financieel_Transactie_Lijst(array (
				'RijschoolId' => $this->user->getRijschoolId(),
				'SessionId' => $_SESSION['SessionId'],
				'Type' => "Leerling",
				'TypeId' => $this->user->getId()
			));
			$this->logger->log("Result: " . print_r($result, true), PEAR_LOG_DEBUG);
			$transacties = $result->Transacties;
			$this->template->assign('transacties', $transacties);
		} catch (SoapFault $e) {
			$this->logger->log("SOAP Fault: (faultcode: {$e->faultcode} faultstring: {$e->faultstring})", PEAR_LOG_INFO);
			switch ($e->faultcode) {
				default :
					$errorcode = 56;
					$errormessage = 'Er is een onbekende fout opgetreden bij het ophalen van het financi&euml;le overzicht ("' . $e->faultstring . '")';
					break;
			}
			$this->errors[] = array (
				'code' => $errorcode,
				'message' => $errormessage
			);
			$this->setSubtitle($errormessage);
		}

		$this->template->assign('errors', $this->errors);
	}
	

	/**
	 * void financieelFactuurDetails()
	 * 
	 * Shows the 'Factuur details' page (for a Leerling that is logged in)
	 * Sets an error array in the template in case of errors.
	 */
	function financieelFactuurDetails($factuurId=0) {
		$this->errors = array ();
		try {
			$result = $this->wsclient->WS_Financieel_Factuur_Details(array (
				'RijschoolId' => $this->user->getRijschoolId(),
				'SessionId' => $_SESSION['SessionId'],
				'FactuurId' => $factuurId
			));
			$details = $result->Details;
			$this->template->assign('details', $details);
		} catch (SoapFault $e) {
			$this->logger->log("SOAP Fault: (faultcode: {$e->faultcode} faultstring: {$e->faultstring})", PEAR_LOG_INFO);
			switch ($e->faultcode) {
				case 2 :
					$errorcode = 58;
					$errormessage = 'De factuurdetails konden niet worden opgehaald ("' . $e->faultstring . '")';
					break;
				default :
					$errorcode = 56;
					$errormessage = 'Er is een onbekende fout opgetreden bij het ophalen van de factuurdetails ("' . $e->faultstring . '")';
					break;
			}
			$this->errors[] = array (
				'code' => $errorcode,
				'message' => $errormessage
			);
			$this->setSubtitle($errormessage);
		} catch (FinancieelException $e) {
			$this->errors[] = array (
				'code' => $e->getCode(),
				'message' => $e->getMessage()
			);
			$this->setSubtitle($e->getMessage());
		}
		$this->template->assign('errors', $this->errors);
	}

	function addError($message, $code) {
		$this->errors[] = array (
			'code' => $code,
			'message' => $message
		);
		$this->setSubtitle($message);
	}

	function getTitle() {
		return $this->title;
	}

	function getSubTitle() {
		return $this->subtitle;
	}

	function setSubTitle($newVal = "") {
		if (!empty ($newVal)) {
			$this->subtitle = $newVal;
		}
	}

	/*
	 * string __toString()
	 * 
	 * Returns a String representation of this class.
	 * 
	 * @return string A representation of this class
	 */
	function __toString() {
		return $this->title;
	}

}
?>
